home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
hewin
/
ccisrc
/
ntmdial.cci
< prev
next >
Wrap
Text File
|
1993-11-30
|
6KB
|
229 lines
/*************************************************************************
* ダイアル処理
*************************************************************************/
int NtmDialArgp = 0;
int NtmDialArgc = 0;
char **NtmDialArgv = NULL;
int NtmDialCount = 0;
#define NTM_NG_SYSTEM (0) /* システムグループ */
#define NTM_NL_NOHING (0)
#define NTM_NL_MODEMCMD_1 (1)
#define NTM_NL_MODEMCMD_2 (2)
#define NTM_NL_CONNECT_CHK (3)
#define NTM_NL_BUSY_WAIT (4)
#define NTM_NL_NO_CARRIER (6)
#define NTM_NL_CONNECT (10)
int ntm_dialWork_clear()
{
if ( NtmDialArgc && NtmDialArgc )
FS_argClear( NtmDialArgc, NtmDialArgv );
NtmDialArgp = 0;
NtmDialArgc = 0;
NtmDialArgv = NULL;
NtmDialCount = 0;
}
int ntm_dial_dial( char *ntm )
{
if ( NtmDialArgp >= NtmDialArgc )
NtmDialArgp = 0;
#if 0
NTM_rsPuts(ntm, "ATD");
NTM_rsPuts(ntm, NtmDialArgv[NtmDialArgp] );
NTM_rsPuts(ntm, "\r" );
#else
NTM_navi_send( ntm, 1, "ATD%s\r", NtmDialArgv[NtmDialArgp] );
#endif
++NtmDialCount;
NtmSetNaviLevel( ntm, NTM_NL_CONNECT_CHK );
NTM_navi_setTimeLimit( ntm, 30, NULL );
return (NORMAL);
}
/*************************************************************************
* タイムオーバーチェック用関数
*************************************************************************/
int ntm_dialNavi_timeover( char *ntm )
{
switch ( NtmGetNaviLevel(ntm) )
{
case NTM_NL_BUSY_WAIT: /* ダイアルBUSY待ち */
NtmSetNaviLevel( ntm, NTM_NL_NOHING );
NTM_navi_setTimeLimit( ntm, 30, NULL );
ntm_dial_dial( ntm );
break;
default:
NtmAutoNavigationOff( ntm ); /* ナビゲーション無効 */
ntm_dialWork_clear();
}
return (0);
}
/*************************************************************************
* "OK" チェック
*************************************************************************/
int ntm_dialNavi_ok( char *ntm, char *s, int no, char *ptr )
{
char *center;
char *cmd;
center = NtmGetCenterPtr(ntm);
switch ( NtmGetNaviLevel(ntm) )
{
case NTM_NL_MODEMCMD_1: /* 第1モデム初期化コマンド */
if ( center )
{
cmd = NtmCenterGetModem2(center);
if ( cmd[0] != '\0' )
{
#if 0
NTM_rsPuts(ntm,cmd);
NTM_rsPuts(ntm,"\r");
#else
NTM_navi_send( ntm, 1, "%s\r", cmd );
#endif
NtmSetNaviLevel( ntm, NTM_NL_MODEMCMD_2 );
NTM_navi_setTimeLimit( ntm, 30, NULL );
break;
}
} /* else / else 第2モデム初期化コマンドチェック後の処理へ */
case NTM_NL_MODEMCMD_2: /* 第2モデム初期化コマンド */
/* ダイアル */
ntm_dial_dial( ntm );
break;
default:
return (0);
}
return (-1);
}
/*************************************************************************
* "CONNECT"
*************************************************************************/
int ntm_dialNavi_connect( char *ntm, char *s, int no, char *ptr )
{
switch ( NtmGetNaviLevel(ntm) )
{
case NTM_NL_CONNECT_CHK: /* 接続成功 */
NTM_navi_msgPrintf(ntm,"<<<<< CONNECT >>>>>");
NtmAutoNavigationOff( ntm ); /* ナビゲーション無効 */
NtmSetNaviLevel( ntm, NTM_NL_CONNECT );
NTM_navi_setTimeLimit( ntm, 0, NULL );
ntm_dialWork_clear();
NTM_online( ntm ); /* 接続 */
break;
default:
return (0);
}
return (-1);
}
/*************************************************************************
* "BUSY"
*************************************************************************/
int ntm_dialNavi_busy( char *ntm, char *s, int no, char *ptr )
{
switch ( NtmGetNaviLevel(ntm) )
{
case NTM_NL_CONNECT_CHK:
NTM_navi_msgPrintf(ntm,"<<<<< BUSY >>>>>");
++NtmDialArgp;
NtmSetNaviLevel( ntm, NTM_NL_BUSY_WAIT );
NTM_navi_setTimeLimit( ntm, 5, NULL );
break;
default:
return (0);
}
return (-1);
}
/*************************************************************************
* "NO CARRIER"
*************************************************************************/
int ntm_dialNavi_no_carrier( char *ntm, char *s, int no, char *ptr )
{
int level;
level = NtmGetNaviLevel(ntm);
if ( level < 300 )
{
NTM_navi_msgPrintf(ntm,"<<<<< NO CARRIER >>>>>");
NtmSetNaviLevel( ntm, NTM_NL_NO_CARRIER );
NtmAutoNavigationOff( ntm ); /* ナビゲーション無効 */
ntm_dialWork_clear();
return (-1);
} else
return (0);
}
/*************************************************************************
* ダイアル
*-------------------------------------------------------------------------
* タイムオーバー処理関数は予め登録しておくこと
*************************************************************************/
int ntm_dialStart2( char *ntm, char *tel, char *connectFunc, char *noCarrierFunc )
{
char *center;
char *cmd;
ntm_dialWork_clear();
if ( tel == NULL || tel[0] == '\0' )
{
TEL_ERR:
DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
AplErrMsgTime, " 電話番号が指定されていません。 " );
return (ERR);
}
NtmDialArgc = FS_argSet( tel, &NtmDialArgv );
if ( NtmDialArgc < 1 )
goto TEL_ERR;
/* ナビゲーションワーク設定 */
NTM_navi_setFunc( ntm, NTM_NG_SYSTEM, 1, "^OK\r" , 0, "ntm_dialNavi_ok" , NULL );
NTM_navi_setFunc( ntm, NTM_NG_SYSTEM, 1, "^CONNECT.*\r" , 0, connectFunc , NULL );
NTM_navi_setFunc( ntm, NTM_NG_SYSTEM, 1, "^BUSY" , 0, "ntm_dialNavi_busy" , NULL );
NTM_navi_setFunc( ntm, NTM_NG_SYSTEM, 1, "^NO CARRIER" , 0, noCarrierFunc , NULL );
NtmSetNaviLevel( ntm, NTM_NL_MODEMCMD_1 );
NtmSetNaviGroup( ntm, NTM_NG_SYSTEM );
NtmAutoNavigationOn( ntm ); /* ナビゲーション有効 */
NTM_navi_msgPrintf(ntm,"<<<<< NAVIGATER START >>>>>");
if ( (center = NtmGetCenterPtr(ntm)) == NULL )
{
cmd = NULL;
} else
{
cmd = NtmCenterGetModem1(center);
if ( cmd[0] == '\0' )
cmd = NULL;
}
if ( cmd )
NTM_rsPuts(ntm,cmd);
else
NTM_rsPuts(ntm,"ATZ");
NTM_rsPuts(ntm,"\r");
return (NORMAL);
}